#pragma once
#include<iostream>
#include<vector>
#include<deque>
using namespace std;

//template<class T>
//class stack
//{
//public:
//	void push(const T& value)
//	{
//		_v.push_back(value);
//	}
//
//	T& top()
//	{
//		return _v.back();
//	}
//
//	const T& top()const
//	{
//		return _v.back();
//	}
//
//	void pop()
//	{
//		_v.pop_back();
//	}
//
//	bool empty()const
//	{
//		return _v.empty();
//	}
//private:
//	vector<T> _v;
//};



namespace bear
{
	template<class T, class Contain = deque<T>>
	class stack
	{
	public:
		void push(const T& value)
		{
			_con.push_back(value);
		}

		T& top()
		{
			return _con.back();
		}

		const T& top()const
		{
			return _con.back();
		}

		void pop()
		{
			_con.pop_back();
		}

		size_t size()const
		{
			return _con.size();
		}

		bool empty()const
		{
			return _con.empty();
		}
	private:
		Contain _con;
	};

}